home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / modelers / geomview / source.lha / Geomview / include / mg.h < prev    next >
C/C++ Source or Header  |  1993-09-09  |  9KB  |  221 lines

  1. /* Copyright (c) 1992 The Geometry Center; University of Minnesota
  2.    1300 South Second Street;  Minneapolis, MN  55454, USA;
  3.    
  4. This file is part of geomview/OOGL. geomview/OOGL is free software;
  5. you can redistribute it and/or modify it only under the terms given in
  6. the file COPYING, which you should have received along with this file.
  7. This and other related software may be obtained via anonymous ftp from
  8. geom.umn.edu; email: software@geom.umn.edu. */
  9.  
  10. /* Authors: Charlie Gunn, Stuart Levy, Tamara Munzner, Mark Phillips */
  11.  
  12. #ifndef MINNEGRAPHICSDEFS
  13. #define MINNEGRAPHICSDEFS
  14.  
  15. /*
  16.  * Public interface to mg (minnegraphics) package.
  17.  */
  18.  
  19. #include "color.h"
  20. #include "point.h"
  21. #include "transform.h"
  22. #include "window.h"
  23. #include "camera.h"
  24. #include "appearance.h"
  25.  
  26. typedef struct mgcontext mgcontext;    /* Opaque typedef */
  27.  
  28. typedef int (*mgshadefunc)( int npoints, HPoint3 *points, Point3 *normals,
  29.                 ColorA *colors, ColorA *newcolors );
  30. typedef int (*mgmapfunc)( void *NDinfo, void *NDpoint, HPoint3 *newpoint,
  31.                 ColorA *newcolor );
  32.  
  33. struct mgfuncs {  /* mg member functions; potentially changed per device */
  34.  
  35.   short      mg_devno;    /* Current device number */
  36.  
  37.   int        (*mg_setdevice)();
  38.   int        (*mg_feature)(/* int feature */);
  39.   mgcontext *    (*mg_ctxcreate)(/* int a1, ... */);
  40.   void        (*mg_ctxdelete)(/* mgcontext *ctx */);
  41.   void        (*mg_ctxset)(/* a1, ...  */);
  42.   int        (*mg_ctxget)(/* int attr, void* valueptr */);
  43.   int        (*mg_ctxselect)(/* mgcontext *ctx */);
  44.   void        (*mg_sync)(/* void */);
  45.   void        (*mg_worldbegin)(/* void */);
  46.   void        (*mg_worldend)(/* void */);
  47.   void        (*mg_reshapeviewport)(/* void */);
  48.   void        (*mg_settransform)(/* Transform T */);
  49.   void        (*mg_gettransform)(/* Transform T */);
  50.   void        (*mg_identity)(/* void */);
  51.   void        (*mg_transform)(/* const Transform T */);
  52.   int        (*mg_pushtransform)(/* void */);
  53.   int        (*mg_poptransform)(/* void */);
  54.   int        (*mg_pushappearance)(/* void */);
  55.   int        (*mg_popappearance)(/* void */);
  56.   Appearance *    (*mg_setappearance)(/* Appearance* app, int merge */);
  57.   Appearance *    (*mg_getappearance)(/* void */);
  58.   int        (*mg_setcamera)(/* Camera* cam */);
  59.   void        (*mg_polygon)(/* int nv, Point3 *v, int nn,
  60.                     Point3 *n, int nc,ColorA *c */);
  61.   void        (*mg_polylist)(/* int np, Poly *p, int nv, Vertex *v, 
  62.                   int plflags */);
  63.   void        (*mg_mesh)(/* int wrap,int nu,int nv,HPoint3 *p,
  64.                      Point3 *n,ColorA *c */);
  65.   void        (*mg_line)(/* HPoint3 *p1, HPoint3 *p2 */);
  66.   void        (*mg_polyline)(/* int nv, HPoint3 *v, int nc, ColorA *c, 
  67.                   int wrapped */);
  68.   void        (*mg_quads)(/* int nquads, HPoint3 *v, Point3 *n, ColorA *c */);
  69.   void        (*mg_bezier)(/* int du, int dv, int dimn, float *ctrlpts,
  70.                   float *txmapst, ColorA *c */);
  71. };
  72.  
  73. extern struct mgfuncs _mgf;
  74.  
  75. /* Common mg attributes -- for mgctxcreate(), mgctxset(), mgctxget() */
  76.  
  77. #define MG_END          0
  78. #define    MG_WINDOW    128    /* WnWindow *                */
  79. #define    MG_PARENT    129    /* mgcontext *context (of parent window)*/
  80. #define    MG_SHOW        130    /* int visible  (make window visible)   */
  81. #define    MG_SETOPTIONS    131    /* int mask (of options to enable) see  */
  82. #define MG_UNSETOPTIONS    132    /* int mask (options to disable)   mg.h */
  83. #define MG_BACKGROUND    133    /* ColorA *                */
  84. #define    MG_CAMERA    134    /* Camera *                */
  85. #define MG_APPEAR       135    /* Appearance *default_appearance    */
  86. #define MG_ApSet        136    /* Appearance create list             */
  87. #define MG_WnSet        137    /* Window create list             */
  88. #define MG_CamSet       138    /* Camera create list             */
  89. #define    MG_ZNUDGE    139    /* float; fraction of Z-range by which lines &
  90.                  * edges are nudged nearer than polygons.
  91.                  */
  92.  
  93. #define    MG_NDMAP    140    /* int (*mapfunc)(void *NDdata, HPointN*, HPoint3*, ColorA*) */
  94.                   /* function returns 1 if color was applied,
  95.                    * else 0
  96.                    */
  97. #define    MG_NDINFO    141    /* void *NDinfo */
  98.  
  99. /* Note 140, 141, 142 used to be MG_EUCLIDEAN, MG_HYPERBOLIC, and
  100.    MG_SPHERICAL, which are now obsolete.  These numbers may be reused now. */
  101.  
  102. #define    MG_SHADER    143    /* mgshadefunc *shader_function        */
  103. #define    MG_SHADERDATA    144    /* void *shaderdata (interpreted by shader) */
  104.  
  105. #define MG_ABLOCK    145    /* void *ablock */
  106.  
  107. #define MG_SPACE    146    /* TM_EUCLIDEAN, TM_HYPERBOLIC,
  108.                    or TM_SPHERICAL */
  109.  
  110. /* NOTE:  the MG_SPACE attribute specifies the space in which the
  111.    objects being drawn live.  It serves the same purpose as the
  112.    NeXT-specific attribute MG_GEOMTYPE, which should eventually
  113.    be phased out. mbp Fri Dec 11 14:51:30 1992 */
  114.  
  115. /* Possible MG Features */
  116. #define MGF_BEZIER    100    /* Driver supports mgbezier */
  117.  
  118.         /* Bitwise ORable options for mg_ctxset MG_[UN]SETOPTIONS */
  119. #define MGO_DOUBLEBUFFER    0x1        /* Default single buffered */
  120. #define MGO_HIDDEN        0x2        /* Default not Z-buffered */
  121. #define MGO_BACKFACECULL    0x4        /* Default back-faces shown */
  122. #define MGO_INHIBITBACKGROUND    0x8        /* Default background drawn */
  123. #define    MGO_INHIBITCLEAR    0x10        /* Default clear at worldbegin*/
  124. #define    MGO_INHIBITSWAP        0x20        /* Default swapbufs at worldend */
  125. #define    MGO_NORED        0x40        /* Inhibit drawing into red */
  126. #define    MGO_NOGREEN        0x80        /* ... green ... */
  127. #define    MGO_NOBLUE        0x100        /* ... or blue planes */
  128.  
  129. #define    MGO_INHIBITCAM        0x200        /* Don't load matrix in worldbegin() */
  130.  
  131.         /* mgmesh 'style' values */
  132. #define MM_NOWRAP    0
  133. #define MM_UWRAP    1
  134. #define MM_VWRAP    2
  135.  
  136. /* mergeflag values for mgsetappearance() */
  137. #define MG_SET        0
  138. #define MG_MERGE    1
  139.  
  140. #define    mgctxselect( mgc )        (*_mgf.mg_ctxselect)( mgc )
  141. #define mgctxcreate            (*_mgf.mg_ctxcreate)
  142. #define    mgctxdelete( mgc )        (*_mgf.mg_ctxdelete)( mgc )
  143. #define    mgctxset            (*_mgf.mg_ctxset)
  144. #define    mgctxget( attr, valuep )    (*_mgf.mg_ctxget)( attr, valuep )
  145. #define    mgpushappearance()        (*_mgf.mg_pushappearance)()
  146. #define    mgpopappearance()        (*_mgf.mg_popappearance)()
  147.  
  148.  
  149. #define    mgsetappearance( ap, merge )    (*_mgf.mg_setappearance)( ap, merge )
  150. #define    mggetappearance()        (*_mgf.mg_getappearance)()
  151. #define    mgsetcamera( cam )            (*_mgf.mg_setcamera)( cam )
  152.  
  153. #define    mgsettransform( T )        (*_mgf.mg_settransform)( T )
  154. #define mggettransform( T )        (*_mgf.mg_gettransform)( T )
  155. #define    mgidentity()            (*_mgf.mg_identity)()
  156. #define    mgtransform( T )        (*_mgf.mg_transform)( T )
  157. #define    mgpushtransform()        (*_mgf.mg_pushtransform)()
  158. #define    mgpoptransform()        (*_mgf.mg_poptransform)()
  159.  
  160. #define    mgreshapeviewport()        (*_mgf.mg_reshapeviewport)()
  161.  
  162.  
  163. #define    mgworldbegin()            (*_mgf.mg_worldbegin)()
  164. #define    mgsync( )            (*_mgf.mg_sync)()
  165. #define    mgworldend()            (*_mgf.mg_worldend)()
  166.  
  167. #define    mgpolygon( nv,v, nn,n, nc,c )    (*_mgf.mg_polygon)( nv,v, nn,n, nc,c )
  168. #define    mgpolylist( np,p, nv,v, flags )    (*_mgf.mg_polylist)( np,p, nv,v, flags )
  169. #define    mgmesh( style, nu,nv, v,n,c )    (*_mgf.mg_mesh)( style, nu,nv, v,n,c )
  170. #define    mgline( p1, p2 )        (*_mgf.mg_line)( p1, p2 )
  171. #define    mgpolyline( nv,v, nc,c, wrap )    (*_mgf.mg_polyline)( nv,v, nc,c, wrap )
  172. #define    mgquads( nquad, v, n, c )    (*_mgf.mg_quads)( nquad, v, n, c )
  173. #define mgbezier( du,dv, dimn, ctrlpts, tx, c )    (*_mgf.mg_bezier)( du, dv, \
  174.                           dimn, ctrlpts, tx, c )
  175. #define mgfeature( feature )        (*_mgf.mg_feature)( feature )
  176.  
  177. extern mgcontext *mgcurrentcontext();        /* Get ptr to current context */
  178. extern int mgbegin( void );            /* Init, select default dev */
  179. extern int mgend( void );            /* Shut down */ 
  180.  
  181. extern mgset4to3( Transform T, int seq );    /* Set 4D->3D transform */
  182. extern int mgget4to3( Transform T );        /* Get 4D->3D; return seq */
  183.  
  184.     /*
  185.      * Sample software-shading function, usable as MG_SHADER.
  186.      */
  187. extern int mg_eucshade( int npoints, HPoint3 *points, Point3 *normals,
  188.                 ColorA *colors, ColorA *newcolors );
  189.  
  190.     /*
  191.      * Device select routines -- set default for future mgctxcreate()'s
  192.      */
  193. extern int mgdevice_GL( void );        
  194. extern int mgdevice_X11( void );
  195. extern int mgdevice_XGL( void );
  196. extern int mgdevice_RIB( void );
  197. extern int mgdevice_RI( void );
  198. extern int mgdevice_PS( void );
  199. extern int mgdevice_VT100( void );
  200. extern int mgdevice_XT( void );
  201. extern int mgdevice_MAC( void );
  202. extern int mgdevice_TEK( void );
  203. extern int mgdevice_TELETYPE( void );
  204. extern int mgdevice_PUNCHCARD( void );
  205. extern int mgdevice_SIMSTIM( void );
  206. extern int mgdevice_NULL( void );
  207.  
  208. extern int mgdevice( int deviceno );    /* Alternative to the above */
  209.  
  210. #define  MGD_NODEV    -1    /* error return: can't select that device */
  211. #define  MGD_NULL    0    /* no device, just return current one */
  212. #define  MGD_GL        1    /* SGI GL */
  213. #define  MGD_XGL    2    /* Sun XGL */
  214. #define  MGD_X11    3    /* Generic X11 */
  215. #define     MGD_RIB    4    /* Renderman RIB*/
  216. #define     MGD_PS        5    /* Postscript */
  217. #define  MGD_RI        6    /* Quick Renderman */
  218.                 /* what else? raster buffer? */
  219.  
  220. #endif
  221.